<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    function iteration(n) {
      /**
       * 方法使用迭代模拟外观数列生成的过程
      */
      //初始化【外观数列】为 1
      let str = '1'
      /**
       * 循环次数 n-1 次，由于str初始化为【外观数列】的第一项，
       * 所以此处循环 n-1 次获得第n项【外观数列】
      */
      while (--n > 0) {
        //统计相邻的相同数字出现次数，初始化为 1
        //因为每个字符至少出现 1 次
        let count = 1
        //当前项【外观数列】
        tempStr = ''
        //遍历上次【外观数列】以生成本次外观数列
        for (var i = 0; i < str.length; i++) {
          // 如果相邻的字符相同，则 count+1
          if (str[i] == str[i + 1]) count++
          //否则不同，则将（统计次数+当前次数）追加到本次【外观数列】中
          //并将统计次数重置为 1 
          else { tempStr += (count + str[i]) }
        }
        //将 str 赋值为当前项【外观数列】
        str = tempStr
      }
      return str
    }
    console.log(iteration(4))
  </script>
</body>

</html>